﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace PubSubLite
{
    /// <summary>
    /// Represents a message
    /// </summary>
    public interface IMessageBase
    {
        /// <summary>
        /// ID of the message
        /// </summary>
        Guid MessageID { get; }

        /// <summary>
        /// Should be set on command replies. Corresponds to the MessageID
        /// of the command.
        /// </summary>
        Guid CorrelatingMessageID { get; set; }
         
        /// <summary>
        /// Type of the message
        /// </summary>
        Type MessageDataType { get; }

        /// <summary>
        /// True if the message is a command
        /// </summary>
        bool IsCommand { get; }

        /// <summary>
        /// True if the message is internal
        /// </summary>
        bool IsInternal { get; }

        /// <summary>
        /// Category/topic of the message
        /// </summary>
        string Category { get; }
    }
}
